package br.unidocs.web.bean;

import java.util.Calendar;
import java.util.Collections;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.component.html.HtmlDataTable;

import br.unidocs.modelo.entidade.Admin;
import br.unidocs.modelo.entidade.Noticia;
import br.unidocs.modelo.entidade.Usuario;
import br.unidocs.servico.NoticiaEJB;
import br.unidocs.web.util.WebUtil;

public class GerenciaNoticiaBackingBean {
	private List<Noticia> noticias = null;

	@EJB
	// falamos para o servidor, crie e insira aqui, para nao criar na mao;
	private NoticiaEJB noticiaEjb;

	private HtmlDataTable tabelaNoticias;

	// Variaveis para selecao de noticia
	private Noticia noticiaSelecionada;

	// Variável para inclusão de notícias
	private String textoNovaNoticia;

	public List<Noticia> getNoticias() {
		if (noticias == null) {
			noticias = noticiaEjb.listaNoticias();
			// Ordenação via código java. Ordena por id desc.
			Collections.sort(noticias, Noticia.COMPARADOR_POR_ID_DESC);
		}
		return noticias;
	}

	public String incluiNoticia() {
		// processa a inclusão
		Noticia novaNoticia = new Noticia();

		Usuario usuario = WebUtil.obterUsuarioLogado();

		if (!(usuario instanceof Admin)) {
			throw new RuntimeException(
					"O usuário normal não deveria estar nessa página.");
		}

		novaNoticia.setAdmin((Admin) usuario);
		novaNoticia.setDataCriacao(Calendar.getInstance().getTime());
		novaNoticia.setTexto(textoNovaNoticia);

		noticiaEjb.criaNoticia(novaNoticia);

		textoNovaNoticia = null;
		noticias = null;
		return "postback";// retornar para a mesma pagina
	}

	public String alteraNoticia() {

		noticiaEjb.atualizaNoticia(noticiaSelecionada);

		noticias = null;
		return "voltar";
	}

	public String selecionaNoticiaParaAlteracao() {
		noticiaSelecionada = (Noticia) tabelaNoticias.getRowData();
		return "alterarNoticia";
	}

	public String confirmaExclusao() {
		noticiaSelecionada = (Noticia) tabelaNoticias.getRowData();
		return "confirmaExclusaoNoticia";
	}

	public String excluiNoticiaSelecionada() {
		// Chama o servico de exclusao
		noticiaEjb.excluiNoticia(noticiaSelecionada);
		return "voltar";
	}

	public HtmlDataTable getTabelaNoticias() {
		return tabelaNoticias;
	}

	public void setTabelaNoticias(HtmlDataTable tabelaNoticias) {
		this.tabelaNoticias = tabelaNoticias;
	}

	public void setNoticias(List<Noticia> noticias) {
		this.noticias = noticias;
	}

	public String getTextoNovaNoticia() {
		return textoNovaNoticia;
	}

	public void setTextoNovaNoticia(String textoNovaNoticia) {
		this.textoNovaNoticia = textoNovaNoticia;
	}

	public Noticia getNoticiaSelecionada() {
		return noticiaSelecionada;
	}

	public void setNoticiaSelecionada(Noticia noticiaSelecionada) {
		this.noticiaSelecionada = noticiaSelecionada;
	}

}
